package org.fisco.bcos.sdk.demo.contract.dgms;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import org.fisco.bcos.sdk.v3.client.Client;
import org.fisco.bcos.sdk.v3.codec.abi.FunctionEncoder;
import org.fisco.bcos.sdk.v3.codec.datatypes.Address;
import org.fisco.bcos.sdk.v3.codec.datatypes.Bool;
import org.fisco.bcos.sdk.v3.codec.datatypes.DynamicArray;
import org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes;
import org.fisco.bcos.sdk.v3.codec.datatypes.Event;
import org.fisco.bcos.sdk.v3.codec.datatypes.Function;
import org.fisco.bcos.sdk.v3.codec.datatypes.Type;
import org.fisco.bcos.sdk.v3.codec.datatypes.TypeReference;
import org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.tuples.generated.Tuple1;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.tuples.generated.Tuple2;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.tuples.generated.Tuple3;
import org.fisco.bcos.sdk.v3.codec.datatypes.generated.tuples.generated.Tuple4;
import org.fisco.bcos.sdk.v3.contract.Contract;
import org.fisco.bcos.sdk.v3.crypto.CryptoSuite;
import org.fisco.bcos.sdk.v3.crypto.keypair.CryptoKeyPair;
import org.fisco.bcos.sdk.v3.model.CryptoType;
import org.fisco.bcos.sdk.v3.model.TransactionReceipt;
import org.fisco.bcos.sdk.v3.model.callback.TransactionCallback;
import org.fisco.bcos.sdk.v3.transaction.model.exception.ContractException;

@SuppressWarnings("unchecked")
public class OneToMore extends Contract {
    public static final String[] BINARY_ARRAY = {
        "60806040526040805190810160405280600981526020017f4f6e65546f4d6f72650000000000000000000000000000000000000000000000815250600990805190602001906200005192919062000543565b5073ffffffffffffffffffffffffffffffffffffffff600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000b457600080fd5b5060405162003c6238038062003c628339810180604052620000da919081019062000947565b6000808480620000f9326200034e640100000000026401000000009004565b32600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506000600260146101000a81548160ff0219169083151502179055505082518451141515620001e1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001d89062000b47565b60405180910390fd5b600090505b83518110156200027b57600084828151811015156200020157fe5b9060200190602002015111151562000250576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002479062000b03565b60405180910390fd5b83818151811015156200025f57fe5b90602001906020020151820191508080600101915050620001e6565b6000821180156200028f5750638000000082105b1515620002d3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002ca9062000b69565b60405180910390fd5b6007829080600181540180825580915050906001820390600052602060002001600090919290919091505550836006600060018152602001908152602001600020908051906020019062000329929190620005ca565b508260059080519060200190620003429291906200061c565b50505050505062000c98565b62000372816000620003b86401000000000262001dad179091906401000000009004565b8073ffffffffffffffffffffffffffffffffffffffff167f05e7c881d716bee8cb7ed92293133ba156704252439e5c502c277448f04e20c260405160405180910390a250565b620003d3828262000476640100000000026401000000009004565b15151562000418576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200040f9062000ae1565b60405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515620004ec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004e39062000b25565b60405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200058657805160ff1916838001178555620005b7565b82800160010185558215620005b7579182015b82811115620005b657825182559160200191906001019062000599565b5b509050620005c6919062000683565b5090565b82805482825590600052602060002090810192821562000609579160200282015b8281111562000608578251825591602001919060010190620005eb565b5b50905062000618919062000683565b5090565b82805482825590600052602060002090810192821562000670579160200282015b828111156200066f5782518290805190602001906200065e929190620006ab565b50916020019190600101906200063d565b5b5090506200067f919062000732565b5090565b620006a891905b80821115620006a45760008160009055506001016200068a565b5090565b90565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620006ee57805160ff19168380011785556200071f565b828001600101855582156200071f579182015b828111156200071e57825182559160200191906001019062000701565b5b5090506200072e919062000683565b5090565b6200076091905b808211156200075c576000818162000752919062000763565b5060010162000739565b5090565b90565b50805460018160011615610100020316600290046000825580601f106200078b5750620007ac565b601f016020900490600052602060002090810190620007ab919062000683565b5b50565b6000620007bd825162000c38565b905092915050565b600082601f8301121515620007d957600080fd5b8151620007f0620007ea8262000bb9565b62000b8b565b9150818183526020840193506020810190508360005b838110156200083a57815186016200081f8882620008d3565b84526020840193506020830192505060018101905062000806565b5050505092915050565b600082601f83011215156200085857600080fd5b81516200086f620008698262000be2565b62000b8b565b915081818352602084019350602081019050838560208402820111156200089557600080fd5b60005b83811015620008c95781620008ae888262000931565b84526020840193506020830192505060018101905062000898565b5050505092915050565b600082601f8301121515620008e757600080fd5b8151620008fe620008f88262000c0b565b62000b8b565b915080825260208301602083018583830111156200091b57600080fd5b6200092883828462000c62565b50505092915050565b60006200093f825162000c58565b905092915050565b6000806000606084860312156200095d57600080fd5b60006200096d86828701620007af565b935050602084015167ffffffffffffffff8111156200098b57600080fd5b620009998682870162000844565b925050604084015167ffffffffffffffff811115620009b757600080fd5b620009c586828701620007c5565b9150509250925092565b6000601c82527f31373a206163636f756e7420616c72656164792068617320726f6c65000000006020830152604082019050919050565b6000603082527f31343a206e657720746f74616c417373657473206d757374206e6f742062652060208301527f6c657373207468616e206265666f7265000000000000000000000000000000006040830152606082019050919050565b6000601f82527f31393a206163636f756e7420697320746865207a65726f2061646472657373006020830152604082019050919050565b6000808252602082019050919050565b6000601782527f30373a20496e76616c696420746f74616c4173736574730000000000000000006020830152604082019050919050565b6000602082019050818103600083015262000afc81620009cf565b9050919050565b6000602082019050818103600083015262000b1e8162000a06565b9050919050565b6000602082019050818103600083015262000b408162000a63565b9050919050565b6000602082019050818103600083015262000b628162000a9a565b9050919050565b6000602082019050818103600083015262000b848162000aaa565b9050919050565b6000604051905081810181811067ffffffffffffffff8211171562000baf57600080fd5b8060405250919050565b600067ffffffffffffffff82111562000bd157600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111562000bfa57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111562000c2357600080fd5b601f19601f8301169050602081019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000c8257808201518184015260208101905062000c65565b8381111562000c92576000848401525b50505050565b612fba8062000ca86000396000f3006080604052600436106100fc576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806303dfd47c1461010157806320694db01461012a57806347bc709314610153578063495e72711461017c5780636352211e146101a55780636e07302b146101e2578063702efdf31461020d57806378b38f3614610238578063877b9a671461027557806389d85013146102b25780638ad7c500146102dd5780639e90f9aa14610306578063cb2ef6f714610331578063d0e7d6111461035c578063d7fb71c914610385578063e6400bbe1461039c578063e9fa0264146103b3578063f5cb17fa146103dc575b600080fd5b34801561010d57600080fd5b506101286004803603610123919081019061244b565b610419565b005b34801561013657600080fd5b50610151600480360361014c9190810190612295565b6107c3565b005b34801561015f57600080fd5b5061017a60048036036101759190810190612295565b6108b9565b005b34801561018857600080fd5b506101a3600480360361019e91908101906123e1565b6109af565b005b3480156101b157600080fd5b506101cc60048036036101c79190810190612422565b610c0e565b6040516101d99190612a8b565b60405180910390f35b3480156101ee57600080fd5b506101f7610cc2565b6040516102049190612aa6565b60405180910390f35b34801561021957600080fd5b50610222610d36565b60405161022f9190612ac8565b60405180910390f35b34801561024457600080fd5b5061025f600480360361025a9190810190612422565b610d4d565b60405161026c9190612b05565b60405180910390f35b34801561028157600080fd5b5061029c60048036036102979190810190612295565b611125565b6040516102a99190612ac8565b60405180910390f35b3480156102be57600080fd5b506102c7611142565b6040516102d49190612d67565b60405180910390f35b3480156102e957600080fd5b5061030460048036036102ff91908101906123a0565b61114c565b005b34801561031257600080fd5b5061031b6111fa565b6040516103289190612a8b565b60405180910390f35b34801561033d57600080fd5b50610346611220565b6040516103539190612ae3565b60405180",
        "910390f35b34801561036857600080fd5b50610383600480360361037e91908101906122be565b6112be565b005b34801561039157600080fd5b5061039a6115dc565b005b3480156103a857600080fd5b506103b161176b565b005b3480156103bf57600080fd5b506103da60048036036103d59190810190612339565b6118fb565b005b3480156103e857600080fd5b5061040360048036036103fe9190810190612295565b611b74565b6040516104109190612d67565b60405180910390f35b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806104c45750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515610505576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104fc90612b87565b60405180910390fd5b61050e83611bbd565b151561054f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054690612bc7565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166003600085815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614151515610615576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060c90612b47565b60405180910390fd5b6003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166003600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600860008282540392505081905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167fec17194b787c395cc9a4b1d5c8e4af64ed927684ad21898f1fb21f8818bed71b86866040516107b6929190612d82565b60405180910390a4505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061086c5750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15156108ad576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a490612b87565b60405180910390fd5b6108b681611c2f565b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806109625750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15156109a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099a90612b87565b60405180910390fd5b6109ac81611c89565b50565b600060606000806109bf33611125565b1515610a00576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109f790612d47565b60405180910390fd5b600780549050935060066000858152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610a6557602002820191906000526020600020905b815481526020019060010190808311610a51575b5050505050925084518351141515610ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa990612ca7565b60405180910390fd5b600090505b8451811015610b5c578281815181101515610ace57fe5b906020019060200201518582815181101515610ae657fe5b9060200190602002015110151515610b33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b2a90612be7565b60405180910390fd5b8481815181101515610b4157fe5b90602001906020020151820191508080600101915050610ab7565b600082118015610b6f5750638000000082105b1515610bb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba790612d27565b60405180910390fd5b84600660006001870181526020019081526020016000209080519060200190610bda929190611f00565b5060078290806001815401808255809150509060018203906000526020600020016000909192909190915055505050505050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610cb9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb090612bc7565b60405180910390fd5b80915050919050565b60606000600780549050905060066000828152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015610d2b57602002820191906000526020600020905b815481526020019060010190808311610d17575b505050505091505090565b6000600260149054906101000a900460ff16905090565b606060008060008060076000815481101515610d6557fe5b906000526020600020015486111515610ed857600092505b600660006001815260200190815260200160002080549050831015610ed3578584108015610dd85750600660006001815260200190815260200160002083815481101515610dc757fe5b906000526020600020015484018611155b15610e9657600583815481101515610dec57fe5b906000526020600020018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015610e8a5780601f10610e5f57610100808354040283529160200191610e8a565b820191906000526020600020905b815481529060010190602001808311610e6d57829003601f168201915b5050505050945061111c565b600660006001815260200190815260200160002083815481101515610eb757fe5b9060005260206000200154840193508280600101935050610d7d565b61111b565b600091505b60078054905082101561111a57600782815481101515610ef957fe5b906000526020600020015486118015610f2e5750600760018301815481101515610f1f57fe5b90600052602060002001548611155b1561110d57600782815481101515610f4257fe5b90600052602060002001549350600090505b60066000600181526020019081526020016000208054905081101561110c578584108015610fe057506006600060018401815260200190815260200160002081815481101515610fa057fe5b90600052602060002001546006600060028501815260200190815260200160002082815481101515610fce57fe5b90600052602060002001548501038611155b1561109e57600581815481101515610ff457fe5b906000526020600020018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156110925780601f1061106757610100808354040283529160200191611092565b820191906000526020600020905b81548152906001019060200180831161107557829003601f168201915b5050505050945061111c565b60066000600184018152602001908152602001600020818154811015156110c157fe5b906000526020600020015460066000600285018152602001908152602001600020828154811015156110ef57fe5b906000526020600020015485010393508080600101915050610f54565b5b8180600101925050610edd565b5b5b50505050919050565b600061113b826000611ce390919063ffffffff16565b9050919050565b6000600854905090565b61115533611125565b1515611196576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161118d90612d47565b60405180910390fd5b80516005805490501415156111e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d790612c07565b60405180910390fd5b80600590805190602001906111f6929190611f4d565b5050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60098054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156112b65780601f1061128b576101008083540402835291602001916112b6565b820191906000526020600020905b81548152906001019060200180831161129957829003601f168201915b505050505081565b600260149054906101000a900460ff16151515611310576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161130790612d07565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff1661133083610c0e565b73ffffffffffffffffffffffffffffffffffffffff16141515611388576040517f08c379a00000",
        "0000000000000000000000000000000000000000000000000000815260040161137f90612c87565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415156113f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ef90612c87565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415151561146a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146190612b67565b60405180910390fd5b826003600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167fec17194b787c395cc9a4b1d5c8e4af64ed927684ad21898f1fb21f8818bed71b85856040516115ce929190612d82565b60405180910390a450505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806116855750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15156116c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116bd90612b87565b60405180910390fd5b600260149054906101000a900460ff161515611717576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170e90612c27565b60405180910390fd5b6000600260146101000a81548160ff0219169083151502179055507f349b4285cb8dde314c53fd9d8e8e578381a7375e4f76f9dd9fe07f9960f120a4336040516117619190612a8b565b60405180910390a1565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614806118145750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515611855576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184c90612b87565b60405180910390fd5b600260149054906101000a900460ff161515156118a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189e90612d07565b60405180910390fd5b6001600260146101000a81548160ff0219169083151502179055507f6f123d3d54c84a7960a573b31c221dcd86e13fd849c5adb0c6ca851468cc1ae4336040516118f19190612a8b565b60405180910390a1565b600061190633611125565b1515611947576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161193e90612d47565b60405180910390fd5b600780549050905060076001820381548110151561196157fe5b906000526020600020015483111515156119b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119a790612cc7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614151515611a22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1990612ce7565b60405180910390fd5b611a2b83611bbd565b151515611a6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6490612c67565b60405180910390fd5b836003600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016008600082825401925050819055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508373ffffffffffffffffffffffffffffffffffffffff167fe27ce25058d1e88f777ec4e0733304e9f1d0168f3974622dc9dacbdf039f31028484604051611b66929190612d82565b60405180910390a250505050565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b611c43816000611dad90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f05e7c881d716bee8cb7ed92293133ba156704252439e5c502c277448f04e20c260405160405180910390a250565b611c9d816000611e5790919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167faf66545c919a3be306ee446d8f42a9558b5b022620df880517bc9593ec0f2d5260405160405180910390a250565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4d90612c47565b60405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611db78282611ce3565b151515611df9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611df090612b27565b60405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611e618282611ce3565b1515611ea2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9990612ba7565b60405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b828054828255906000526020600020908101928215611f3c579160200282015b82811115611f3b578251825591602001919060010190611f20565b5b509050611f499190611fad565b5090565b828054828255906000526020600020908101928215611f9c579160200282015b82811115611f9b578251829080519060200190611f8b929190611fd2565b5091602001919060010190611f6d565b5b509050611fa99190612052565b5090565b611fcf91905b80821115611fcb576000816000905550600101611fb3565b5090565b90565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f1061201357805160ff1916838001178555612041565b82800160010185558215612041579182015b82811115612040578251825591602001919060010190612025565b5b50905061204e9190611fad565b5090565b61207b91905b80821115612077576000818161206e919061207e565b50600101612058565b5090565b90565b50805460018160011615610100020316600290046000825580601f106120a457506120c3565b601f0160209004906000526020600020908101906120c29190611fad565b5b50565b60006120d28235612f03565b905092915050565b600082601f83011215156120ed57600080fd5b81356121006120fb82612ddf565b612db2565b9150818183526020840193506020810190508360005b83811015612146578135860161212c888261222b565b845260208401935060208301925050600181019050612116565b5050505092915050565b600082601f830112151561216357600080fd5b813561217661217182612e07565b612db2565b9150818183526020840193506020810190508385602084028201111561219b57600080fd5b60005b838110156121cb57816121b18882612281565b84526020840193506020830192505060018101905061219e565b5050505092915050565b600082601f83011215156121e857600080fd5b81356121fb6121f682612e2f565b612db2565b9150808252602083016020830185838301111561221757600080fd5b612222838284612f2d565b50505092915050565b600082601f830112151561223e57600080fd5b813561225161224c82612e5b565b612db2565b9150808252602083016020830185838301111561226d57600080fd5b612278838284612f2d565b50505092915050565b600061228d8235612f23565b905092915050565b6000602082840312156122a757600080fd5b60006122b5848285016120c6565b91505092915050565b600080600080608085870312156122d457600080fd5b60006122e2878288016120c6565b94505060206122f3878288016120c6565b935050604061230487828801612281565b925050606085013567ffffffffffffffff81111561232157600080fd5b61232d878288016121d5565b91505092959194509250565b60008060006060848603121561234e57600080fd5b600061235c86828701",
        "6120c6565b935050602061236d86828701612281565b925050604084013567ffffffffffffffff81111561238a57600080fd5b612396868287016121d5565b9150509250925092565b6000602082840312156123b257600080fd5b600082013567ffffffffffffffff8111156123cc57600080fd5b6123d8848285016120da565b91505092915050565b6000602082840312156123f357600080fd5b600082013567ffffffffffffffff81111561240d57600080fd5b61241984828501612150565b91505092915050565b60006020828403121561243457600080fd5b600061244284828501612281565b91505092915050565b6000806040838503121561245e57600080fd5b600061246c85828601612281565b925050602083013567ffffffffffffffff81111561248957600080fd5b612495858286016121d5565b9150509250929050565b6124a881612ecd565b82525050565b60006124b982612e94565b8084526020840193506124cb83612e87565b60005b828110156124fd576124e1868351612a7c565b6124ea82612ec0565b91506020860195506001810190506124ce565b50849250505092915050565b61251281612eed565b82525050565b600061252382612e9f565b808452612537816020860160208601612f3c565b61254081612f6f565b602085010191505092915050565b600061255982612eb5565b80845261256d816020860160208601612f3c565b61257681612f6f565b602085010191505092915050565b600061258f82612eaa565b8084526125a3816020860160208601612f3c565b6125ac81612f6f565b602085010191505092915050565b6000601c82527f31373a206163636f756e7420616c72656164792068617320726f6c65000000006020830152604082019050919050565b6000601e82527f32303a206173736574496420686173206265656e2064657374726f79656400006020830152604082019050919050565b6000601c82527f31333a2073656e6420746f20746865207a65726f2061646472657373000000006020830152604082019050919050565b6000602d82527f30343a2063616c6c657220646f6573206e6f742068617665207468652073757060208301527f6572207065726d697373696f6e000000000000000000000000000000000000006040830152606082019050919050565b6000601e82527f31383a206163636f756e7420646f6573206e6f74206861766520726f6c6500006020830152604082019050919050565b6000601f82527f31313a206173736574496420646f6573206e6f742068617665206f776e6572006020830152604082019050919050565b6000603082527f31343a206e657720746f74616c417373657473206d757374206e6f742062652060208301527f6c657373207468616e206265666f7265000000000000000000000000000000006040830152606082019050919050565b6000602b82527f31363a206173736574496e666f2773206c656e677468206d757374206571756160208301527f6c20746f206265666f72650000000000000000000000000000000000000000006040830152606082019050919050565b6000601d82527f30363a20636f6e7472616374206973206e6f742073757370656e6465640000006020830152604082019050919050565b6000601f82527f31393a206163636f756e7420697320746865207a65726f2061646472657373006020830152604082019050919050565b6000601a82527f31303a206173736574496420616c7265616479206973737565640000000000006020830152604082019050919050565b6000602182527f31323a2073656e64657220646f6573206e6f74206f776e20746865206173736560208301527f74000000000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b6000602d82527f31353a20746f74616c4173736574732773206c656e677468206d75737420657160208301527f75616c20746f206265666f7265000000000000000000000000000000000000006040830152606082019050919050565b6000601e82527f30383a20617373657449642065786365656420746f74616c41737365747300006020830152604082019050919050565b6000601d82527f30393a20697373756520746f20746865207a65726f20616464726573730000006020830152604082019050919050565b6000601982527f30353a20636f6e74726163742069732073757370656e646564000000000000006020830152604082019050919050565b6000601782527f30373a20496e76616c696420746f74616c4173736574730000000000000000006020830152604082019050919050565b6000602e82527f30333a2063616c6c657220646f6573206e6f742068617665207468652069737360208301527f756572207065726d697373696f6e0000000000000000000000000000000000006040830152606082019050919050565b612a8581612ef9565b82525050565b6000602082019050612aa0600083018461249f565b92915050565b60006020820190508181036000830152612ac081846124ae565b905092915050565b6000602082019050612add6000830184612509565b92915050565b60006020820190508181036000830152612afd8184612584565b905092915050565b60006020820190508181036000830152612b1f818461254e565b905092915050565b60006020820190508181036000830152612b40816125ba565b9050919050565b60006020820190508181036000830152612b60816125f1565b9050919050565b60006020820190508181036000830152612b8081612628565b9050919050565b60006020820190508181036000830152612ba08161265f565b9050919050565b60006020820190508181036000830152612bc0816126bc565b9050919050565b60006020820190508181036000830152612be0816126f3565b9050919050565b60006020820190508181036000830152612c008161272a565b9050919050565b60006020820190508181036000830152612c2081612787565b9050919050565b60006020820190508181036000830152612c40816127e4565b9050919050565b60006020820190508181036000830152612c608161281b565b9050919050565b60006020820190508181036000830152612c8081612852565b9050919050565b60006020820190508181036000830152612ca081612889565b9050919050565b60006020820190508181036000830152612cc0816128e6565b9050919050565b60006020820190508181036000830152612ce081612943565b9050919050565b60006020820190508181036000830152612d008161297a565b9050919050565b60006020820190508181036000830152612d20816129b1565b9050919050565b60006020820190508181036000830152612d40816129e8565b9050919050565b60006020820190508181036000830152612d6081612a1f565b9050919050565b6000602082019050612d7c6000830184612a7c565b92915050565b6000604082019050612d976000830185612a7c565b8181036020830152612da98184612518565b90509392505050565b6000604051905081810181811067ffffffffffffffff82111715612dd557600080fd5b8060405250919050565b600067ffffffffffffffff821115612df657600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115612e1e57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115612e4657600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115612e7257600080fd5b601f19601f8301169050602081019050919050565b6000602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612f5a578082015181840152602081019050612f3f565b83811115612f69576000848401525b50505050565b6000601f19601f83011690509190505600a265627a7a72305820d36b7044454d63048a38cfb46b5a09dd20d3aa7a156b3dcbe78767b35cbfbf136c6578706572696d656e74616cf50037"
    };

    public static final String BINARY =
            org.fisco.bcos.sdk.v3.utils.StringUtils.joinAll("", BINARY_ARRAY);

    public static final String[] SM_BINARY_ARRAY = {
        "60806040526040805190810160405280600981526020017f4f6e65546f4d6f72650000000000000000000000000000000000000000000000815250600990805190602001906200005192919062000543565b5073ffffffffffffffffffffffffffffffffffffffff600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550348015620000b457600080fd5b5060405162003c6238038062003c628339810180604052620000da919081019062000947565b6000808480620000f9326200034e640100000000026401000000009004565b32600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506000600260146101000a81548160ff0219169083151502179055505082518451141515620001e1576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401620001d89062000b03565b60405180910390fd5b600090505b83518110156200027b57600084828151811015156200020157fe5b9060200190602002015111151562000250576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401620002479062000ae1565b60405180910390fd5b83818151811015156200025f57fe5b90602001906020020151820191508080600101915050620001e6565b6000821180156200028f5750638000000082105b1515620002d3576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401620002ca9062000b47565b60405180910390fd5b6007829080600181540180825580915050906001820390600052602060002001600090919290919091505550836006600060018152602001908152602001600020908051906020019062000329929190620005ca565b508260059080519060200190620003429291906200061c565b50505050505062000c98565b62000372816000620003b86401000000000262001dad179091906401000000009004565b8073ffffffffffffffffffffffffffffffffffffffff167fd766f4a67950d691b1432c913f7a137a6566c6434f39026cc104656f3de99cdb60405160405180910390a250565b620003d3828262000476640100000000026401000000009004565b15151562000418576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016200040f9062000b69565b60405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515620004ec576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401620004e39062000b25565b60405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200058657805160ff1916838001178555620005b7565b82800160010185558215620005b7579182015b82811115620005b657825182559160200191906001019062000599565b5b509050620005c6919062000683565b5090565b82805482825590600052602060002090810192821562000609579160200282015b8281111562000608578251825591602001919060010190620005eb565b5b50905062000618919062000683565b5090565b82805482825590600052602060002090810192821562000670579160200282015b828111156200066f5782518290805190602001906200065e929190620006ab565b50916020019190600101906200063d565b5b5090506200067f919062000732565b5090565b620006a891905b80821115620006a45760008160009055506001016200068a565b5090565b90565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620006ee57805160ff19168380011785556200071f565b828001600101855582156200071f579182015b828111156200071e57825182559160200191906001019062000701565b5b5090506200072e919062000683565b5090565b6200076091905b808211156200075c576000818162000752919062000763565b5060010162000739565b5090565b90565b50805460018160011615610100020316600290046000825580601f106200078b5750620007ac565b601f016020900490600052602060002090810190620007ab919062000683565b5b50565b6000620007bd825162000c38565b905092915050565b600082601f8301121515620007d957600080fd5b8151620007f0620007ea8262000bb9565b62000b8b565b9150818183526020840193506020810190508360005b838110156200083a57815186016200081f8882620008d3565b84526020840193506020830192505060018101905062000806565b5050505092915050565b600082601f83011215156200085857600080fd5b81516200086f620008698262000be2565b62000b8b565b915081818352602084019350602081019050838560208402820111156200089557600080fd5b60005b83811015620008c95781620008ae888262000931565b84526020840193506020830192505060018101905062000898565b5050505092915050565b600082601f8301121515620008e757600080fd5b8151620008fe620008f88262000c0b565b62000b8b565b915080825260208301602083018583830111156200091b57600080fd5b6200092883828462000c62565b50505092915050565b60006200093f825162000c58565b905092915050565b6000806000606084860312156200095d57600080fd5b60006200096d86828701620007af565b935050602084015167ffffffffffffffff8111156200098b57600080fd5b620009998682870162000844565b925050604084015167ffffffffffffffff811115620009b757600080fd5b620009c586828701620007c5565b9150509250925092565b6000603082527f31343a206e657720746f74616c417373657473206d757374206e6f742062652060208301527f6c657373207468616e206265666f7265000000000000000000000000000000006040830152606082019050919050565b6000808252602082019050919050565b6000601f82527f31393a206163636f756e7420697320746865207a65726f2061646472657373006020830152604082019050919050565b6000601782527f30373a20496e76616c696420746f74616c4173736574730000000000000000006020830152604082019050919050565b6000601c82527f31373a206163636f756e7420616c72656164792068617320726f6c65000000006020830152604082019050919050565b6000602082019050818103600083015262000afc81620009cf565b9050919050565b6000602082019050818103600083015262000b1e8162000a2c565b9050919050565b6000602082019050818103600083015262000b408162000a3c565b9050919050565b6000602082019050818103600083015262000b628162000a73565b9050919050565b6000602082019050818103600083015262000b848162000aaa565b9050919050565b6000604051905081810181811067ffffffffffffffff8211171562000baf57600080fd5b8060405250919050565b600067ffffffffffffffff82111562000bd157600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111562000bfa57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff82111562000c2357600080fd5b601f19601f8301169050602081019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b8381101562000c8257808201518184015260208101905062000c65565b8381111562000c92576000848401525b50505050565b612fba8062000ca86000396000f3006080604052600436106100fc576000357c0100000000000000000000000000000000000000000000000000000000900463ffffffff16806302afb2861461010157806307ba60f41461013e5780631756244b146101695780631e74fda2146101945780632392c068146101bd57806339539073146101e65780634c4c9b48146102115780634db9df361461023a5780634e2b3953146102515780635711734b1461028e5780636b14f0a4146102cb578063799013bc146102e25780637a4d35471461030d57806380b30b3f146103365780638ad7f5401461035f57806393f45b3f14610388578063aefc758a146103b1578063d130b9cd146103dc575b600080fd5b34801561010d57600080fd5b5061012860048036036101239190810190612295565b610419565b6040516101359190612ac8565b60405180910390f35b34801561014a57600080fd5b50610153610436565b6040516101609190612ae3565b60405180910390f35b34801561017557600080fd5b5061017e6104d4565b60405161018b9190612aa6565b60405180910390f35b3480156101a057600080fd5b506101bb60048036036101b69190810190612339565b610548565b005b3480156101c957600080fd5b506101e460048036036101df9190810190612295565b6107c1565b005b3480156101f257600080fd5b506101fb6108b7565b6040516102089190612a8b565b60405180910390f35b34801561021d57600080fd5b50610238600480360361023391908101906123a0565b6108dd565b005b34801561024657600080fd5b5061024f61098b565b005b34801561025d57600080fd5b5061027860048036036102739190810190612295565b610b1a565b6040516102859190612d67565b60405180910390f35b34801561029a57600080fd5b506102b560048036036102b09190810190612422565b610b63565b6040516102c29190612a8b565b60405180910390f35b3480156102d757600080fd5b506102e0610c17565b005b3480156102ee57600080fd5b506102f7610da7565b6040516103049190612ac8565b60405180910390f35b34801561031957600080fd5b50610334600480360361032f9190810190612295565b610dbe565b005b34801561034257600080fd5b5061035d600480360361035891908101906122be56",
        "5b610eb4565b005b34801561036b57600080fd5b506103866004803603610381919081019061244b565b6111d2565b005b34801561039457600080fd5b506103af60048036036103aa91908101906123e1565b61157c565b005b3480156103bd57600080fd5b506103c66117db565b6040516103d39190612d67565b60405180910390f35b3480156103e857600080fd5b5061040360048036036103fe9190810190612422565b6117e5565b6040516104109190612b05565b60405180910390f35b600061042f826000611bbd90919063ffffffff16565b9050919050565b60098054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156104cc5780601f106104a1576101008083540402835291602001916104cc565b820191906000526020600020905b8154815290600101906020018083116104af57829003601f168201915b505050505081565b6060600060078054905090506006600082815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561053d57602002820191906000526020600020905b815481526020019060010190808311610529575b505050505091505090565b600061055333610419565b1515610594576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161058b90612c27565b60405180910390fd5b60078054905090506007600182038154811015156105ae57fe5b906000526020600020015483111515156105fd576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016105f490612c07565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415151561066f576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161066690612d27565b60405180910390fd5b61067883611c87565b1515156106ba576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016106b190612cc7565b60405180910390fd5b836003600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060016008600082825401925050819055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508373ffffffffffffffffffffffffffffffffffffffff167f645797d9fab0efc08a8c8e1b1a514147c9d6656868dbb2fd8c9a608aded76d3084846040516107b3929190612d82565b60405180910390a250505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061086a5750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15156108ab576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016108a290612c67565b60405180910390fd5b6108b481611cf9565b50565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6108e633610419565b1515610927576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161091e90612c27565b60405180910390fd5b8051600580549050141515610971576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161096890612b47565b60405180910390fd5b8060059080519060200190610987929190611f00565b5050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610a345750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515610a75576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401610a6c90612c67565b60405180910390fd5b600260149054906101000a900460ff161515610ac6576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401610abd90612d07565b60405180910390fd5b6000600260146101000a81548160ff0219169083151502179055507f49cf6bd0eac7c3496174468c250e85009598e5c78d9a83e07df711d9da5c185a33604051610b109190612a8b565b60405180910390a1565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614151515610c0e576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401610c0590612b67565b60405180910390fd5b80915050919050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610cc05750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515610d01576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401610cf890612c67565b60405180910390fd5b600260149054906101000a900460ff16151515610d53576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401610d4a90612ca7565b60405180910390fd5b6001600260146101000a81548160ff0219169083151502179055507f8773c8f57dc13d3ee6a296fb66e009fe3abc25fce48e4bdeb7583b3064ad35e833604051610d9d9190612a8b565b60405180910390a1565b6000600260149054906101000a900460ff16905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610e675750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b1515610ea8576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401610e9f90612c67565b60405180910390fd5b610eb181611d53565b50565b600260149054906101000a900460ff16151515610f06576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401610efd90612ca7565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff16610f2683610b63565b73ffffffffffffffffffffffffffffffffffffffff16141515610f7e576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401610f7590612c47565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141515610fee576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401610fe590612c47565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614151515611060576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161105790612bc7565b60405180910390fd5b826003600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f03adcfa31acbe66b869f42da88a1595526b1bff922f953259ed8dc7057377d6485856040516111c4929190612d82565b60405180910390a450505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16148061127d5750600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b15156112be576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016112b590612c67565b60405180910390fd5b6112c783611c87565b1515611308576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016112ff90612b67565b60405180910390fd5b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1660036000858152602001908152602001600020600090",
        "54906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141515156113ce576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016113c590612ce7565b60405180910390fd5b6003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166003600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825403925050819055506001600860008282540392505081905550600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff167f03adcfa31acbe66b869f42da88a1595526b1bff922f953259ed8dc7057377d64868660405161156f929190612d82565b60405180910390a4505050565b6000606060008061158c33610419565b15156115cd576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016115c490612c27565b60405180910390fd5b60078054905093506006600085815260200190815260200160002080548060200260200160405190810160405280929190818152602001828054801561163257602002820191906000526020600020905b81548152602001906001019080831161161e575b505050505092508451835114151561167f576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161167690612ba7565b60405180910390fd5b600090505b845181101561172957828181518110151561169b57fe5b9060200190602002015185828151811015156116b357fe5b9060200190602002015110151515611700576040517fc703cb120000000000000000000000000000000000000000000000000000000081526004016116f790612b27565b60405180910390fd5b848181518110151561170e57fe5b90602001906020020151820191508080600101915050611684565b60008211801561173c5750638000000082105b151561177d576040517fc703cb1200000000000000000000000000000000000000000000000000000000815260040161177490612c87565b60405180910390fd5b846006600060018701815260200190815260200160002090805190602001906117a7929190611f60565b5060078290806001815401808255809150509060018203906000526020600020016000909192909190915055505050505050565b6000600854905090565b6060600080600080600760008154811015156117fd57fe5b90600052602060002001548611151561197057600092505b60066000600181526020019081526020016000208054905083101561196b578584108015611870575060066000600181526020019081526020016000208381548110151561185f57fe5b906000526020600020015484018611155b1561192e5760058381548110151561188457fe5b906000526020600020018054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156119225780601f106118f757610100808354040283529160200191611922565b820191906000526020600020905b81548152906001019060200180831161190557829003601f168201915b50505050509450611bb4565b60066000600181526020019081526020016000208381548110151561194f57fe5b9060005260206000200154840193508280600101935050611815565b611bb3565b600091505b600780549050821015611bb25760078281548110151561199157fe5b9060005260206000200154861180156119c657506007600183018154811015156119b757fe5b90600052602060002001548611155b15611ba5576007828154811015156119da57fe5b90600052602060002001549350600090505b600660006001815260200190815260200160002080549050811015611ba4578584108015611a7857506006600060018401815260200190815260200160002081815481101515611a3857fe5b90600052602060002001546006600060028501815260200190815260200160002082815481101515611a6657fe5b90600052602060002001548501038611155b15611b3657600581815481101515611a8c57fe5b906000526020600020018054600181600116156101000203166002900480601f016020809104026020016040519081016040528092919081815260200182805460018160011615610100020316600290048015611b2a5780601f10611aff57610100808354040283529160200191611b2a565b820191906000526020600020905b815481529060010190602001808311611b0d57829003601f168201915b50505050509450611bb4565b6006600060018401815260200190815260200160002081815481101515611b5957fe5b90600052602060002001546006600060028501815260200190815260200160002082815481101515611b8757fe5b9060005260206000200154850103935080806001019150506119ec565b5b8180600101925050611975565b5b5b50505050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614151515611c30576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401611c2790612be7565b60405180910390fd5b8260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415915050919050565b611d0d816000611dad90919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167fd766f4a67950d691b1432c913f7a137a6566c6434f39026cc104656f3de99cdb60405160405180910390a250565b611d67816000611e5790919063ffffffff16565b8073ffffffffffffffffffffffffffffffffffffffff167f36b34ae98169cd7ef0173d334314715146307b58e670074b7fcb08536203e19760405160405180910390a250565b611db78282611bbd565b151515611df9576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401611df090612d47565b60405180910390fd5b60018260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b611e618282611bbd565b1515611ea2576040517fc703cb12000000000000000000000000000000000000000000000000000000008152600401611e9990612b87565b60405180910390fd5b60008260000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b828054828255906000526020600020908101928215611f4f579160200282015b82811115611f4e578251829080519060200190611f3e929190611fad565b5091602001919060010190611f20565b5b509050611f5c919061202d565b5090565b828054828255906000526020600020908101928215611f9c579160200282015b82811115611f9b578251825591602001919060010190611f80565b5b509050611fa99190612059565b5090565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10611fee57805160ff191683800117855561201c565b8280016001018555821561201c579182015b8281111561201b578251825591602001919060010190612000565b5b5090506120299190612059565b5090565b61205691905b808211156120525760008181612049919061207e565b50600101612033565b5090565b90565b61207b91905b8082111561207757600081600090555060010161205f565b5090565b90565b50805460018160011615610100020316600290046000825580601f106120a457506120c3565b601f0160209004906000526020600020908101906120c29190612059565b5b50565b60006120d28235612f03565b905092915050565b600082601f83011215156120ed57600080fd5b81356121006120fb82612ddf565b612db2565b9150818183526020840193506020810190508360005b83811015612146578135860161212c888261222b565b845260208401935060208301925050600181019050612116565b5050505092915050565b600082601f830112151561216357600080fd5b813561217661217182612e07565b612db2565b9150818183526020840193506020810190508385602084028201111561219b57600080fd5b60005b838110156121cb57816121b18882612281565b84526020840193506020830192505060018101905061219e565b5050505092915050565b600082601f83011215156121e857600080fd5b81356121fb6121f682612e2f565b612db2565b9150808252602083016020830185838301111561221757600080fd5b612222838284612f2d565b50505092915050565b600082601f830112151561223e57600080fd5b813561225161224c82612e5b565b612db2565b9150808252602083016020830185838301111561226d57600080fd5b612278838284612f2d565b50505092915050565b600061228d8235612f23565b905092915050565b6000602082840312156122a757600080fd5b60006122b5848285016120c6565b91505092915050565b600080600080608085870312156122d457600080fd5b60006122e2878288016120c6565b94505060206122f3878288016120c6565b935050604061230487828801612281565b925050606085013567ffffffffffffffff81111561232157600080fd5b61232d878288016121d5565b91505092959194509250565b60008060006060848603121561234e57600080fd5b600061235c86828701",
        "6120c6565b935050602061236d86828701612281565b925050604084013567ffffffffffffffff81111561238a57600080fd5b612396868287016121d5565b9150509250925092565b6000602082840312156123b257600080fd5b600082013567ffffffffffffffff8111156123cc57600080fd5b6123d8848285016120da565b91505092915050565b6000602082840312156123f357600080fd5b600082013567ffffffffffffffff81111561240d57600080fd5b61241984828501612150565b91505092915050565b60006020828403121561243457600080fd5b600061244284828501612281565b91505092915050565b6000806040838503121561245e57600080fd5b600061246c85828601612281565b925050602083013567ffffffffffffffff81111561248957600080fd5b612495858286016121d5565b9150509250929050565b6124a881612ecd565b82525050565b60006124b982612e94565b8084526020840193506124cb83612e87565b60005b828110156124fd576124e1868351612a7c565b6124ea82612ec0565b91506020860195506001810190506124ce565b50849250505092915050565b61251281612eed565b82525050565b600061252382612e9f565b808452612537816020860160208601612f3c565b61254081612f6f565b602085010191505092915050565b600061255982612eb5565b80845261256d816020860160208601612f3c565b61257681612f6f565b602085010191505092915050565b600061258f82612eaa565b8084526125a3816020860160208601612f3c565b6125ac81612f6f565b602085010191505092915050565b6000603082527f31343a206e657720746f74616c417373657473206d757374206e6f742062652060208301527f6c657373207468616e206265666f7265000000000000000000000000000000006040830152606082019050919050565b6000602b82527f31363a206173736574496e666f2773206c656e677468206d757374206571756160208301527f6c20746f206265666f72650000000000000000000000000000000000000000006040830152606082019050919050565b6000601f82527f31313a206173736574496420646f6573206e6f742068617665206f776e6572006020830152604082019050919050565b6000601e82527f31383a206163636f756e7420646f6573206e6f74206861766520726f6c6500006020830152604082019050919050565b6000602d82527f31353a20746f74616c4173736574732773206c656e677468206d75737420657160208301527f75616c20746f206265666f7265000000000000000000000000000000000000006040830152606082019050919050565b6000601c82527f31333a2073656e6420746f20746865207a65726f2061646472657373000000006020830152604082019050919050565b6000601f82527f31393a206163636f756e7420697320746865207a65726f2061646472657373006020830152604082019050919050565b6000601e82527f30383a20617373657449642065786365656420746f74616c41737365747300006020830152604082019050919050565b6000602e82527f30333a2063616c6c657220646f6573206e6f742068617665207468652069737360208301527f756572207065726d697373696f6e0000000000000000000000000000000000006040830152606082019050919050565b6000602182527f31323a2073656e64657220646f6573206e6f74206f776e20746865206173736560208301527f74000000000000000000000000000000000000000000000000000000000000006040830152606082019050919050565b6000602d82527f30343a2063616c6c657220646f6573206e6f742068617665207468652073757060208301527f6572207065726d697373696f6e000000000000000000000000000000000000006040830152606082019050919050565b6000601782527f30373a20496e76616c696420746f74616c4173736574730000000000000000006020830152604082019050919050565b6000601982527f30353a20636f6e74726163742069732073757370656e646564000000000000006020830152604082019050919050565b6000601a82527f31303a206173736574496420616c7265616479206973737565640000000000006020830152604082019050919050565b6000601e82527f32303a206173736574496420686173206265656e2064657374726f79656400006020830152604082019050919050565b6000601d82527f30363a20636f6e7472616374206973206e6f742073757370656e6465640000006020830152604082019050919050565b6000601d82527f30393a20697373756520746f20746865207a65726f20616464726573730000006020830152604082019050919050565b6000601c82527f31373a206163636f756e7420616c72656164792068617320726f6c65000000006020830152604082019050919050565b612a8581612ef9565b82525050565b6000602082019050612aa0600083018461249f565b92915050565b60006020820190508181036000830152612ac081846124ae565b905092915050565b6000602082019050612add6000830184612509565b92915050565b60006020820190508181036000830152612afd8184612584565b905092915050565b60006020820190508181036000830152612b1f818461254e565b905092915050565b60006020820190508181036000830152612b40816125ba565b9050919050565b60006020820190508181036000830152612b6081612617565b9050919050565b60006020820190508181036000830152612b8081612674565b9050919050565b60006020820190508181036000830152612ba0816126ab565b9050919050565b60006020820190508181036000830152612bc0816126e2565b9050919050565b60006020820190508181036000830152612be08161273f565b9050919050565b60006020820190508181036000830152612c0081612776565b9050919050565b60006020820190508181036000830152612c20816127ad565b9050919050565b60006020820190508181036000830152612c40816127e4565b9050919050565b60006020820190508181036000830152612c6081612841565b9050919050565b60006020820190508181036000830152612c808161289e565b9050919050565b60006020820190508181036000830152612ca0816128fb565b9050919050565b60006020820190508181036000830152612cc081612932565b9050919050565b60006020820190508181036000830152612ce081612969565b9050919050565b60006020820190508181036000830152612d00816129a0565b9050919050565b60006020820190508181036000830152612d20816129d7565b9050919050565b60006020820190508181036000830152612d4081612a0e565b9050919050565b60006020820190508181036000830152612d6081612a45565b9050919050565b6000602082019050612d7c6000830184612a7c565b92915050565b6000604082019050612d976000830185612a7c565b8181036020830152612da98184612518565b90509392505050565b6000604051905081810181811067ffffffffffffffff82111715612dd557600080fd5b8060405250919050565b600067ffffffffffffffff821115612df657600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115612e1e57600080fd5b602082029050602081019050919050565b600067ffffffffffffffff821115612e4657600080fd5b601f19601f8301169050602081019050919050565b600067ffffffffffffffff821115612e7257600080fd5b601f19601f8301169050602081019050919050565b6000602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015612f5a578082015181840152602081019050612f3f565b83811115612f69576000848401525b50505050565b6000601f19601f83011690509190505600a265627a7a723058208ec3da9443ee3a09edd688d368c90073d9f73f6d564b2b880fb6b6be29fce2696c6578706572696d656e74616cf50037"
    };

    public static final String SM_BINARY =
            org.fisco.bcos.sdk.v3.utils.StringUtils.joinAll("", SM_BINARY_ARRAY);

    public static final String[] ABI_ARRAY = {
        "[{\"conflictFields\":[{\"kind\":0},{\"kind\":3,\"slot\":3,\"value\":[0]},{\"kind\":4,\"value\":[1]},{\"kind\":4,\"value\":[2]},{\"kind\":4,\"value\":[8]},{\"kind\":4,\"value\":[10]}],\"constant\":false,\"inputs\":[{\"name\":\"assetId\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"destroy\",\"outputs\":[],\"payable\":false,\"selector\":[65000572,2329408832],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"conflictFields\":[{\"kind\":0},{\"kind\":4,\"value\":[1]},{\"kind\":4,\"value\":[2]}],\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"addIssuer\",\"outputs\":[],\"payable\":false,\"selector\":[543772080,596820072],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"conflictFields\":[{\"kind\":0},{\"kind\":4,\"value\":[1]},{\"kind\":4,\"value\":[2]}],\"constant\":false,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"removeIssuer\",\"outputs\":[],\"payable\":false,\"selector\":[1203531923,2051880263],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"conflictFields\":[{\"kind\":0},{\"kind\":4,\"value\":[7]}],\"constant\":false,\"inputs\":[{\"name\":\"totalAssets\",\"type\":\"uint256[]\"}],\"name\":\"updateTotalAssets\",\"outputs\":[],\"payable\":false,\"selector\":[1230926449,2482264895],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"conflictFields\":[{\"kind\":3,\"slot\":3,\"value\":[0]}],\"constant\":true,\"inputs\":[{\"name\":\"assetId\",\"type\":\"uint256\"}],\"name\":\"ownerOf\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"selector\":[1666326814,1460761419],\"stateMutability\":\"view\",\"type\":\"function\"},{\"conflictFields\":[{\"kind\":0},{\"kind\":4,\"value\":[7]}],\"constant\":false,\"inputs\":[],\"name\":\"getTotalAssets\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256[]\"}],\"payable\":false,\"selector\":[1845964843,391521355],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"conflictFields\":[{\"kind\":4,\"value\":[2]}],\"constant\":true,\"inputs\":[],\"name\":\"suspended\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"selector\":[1882127859,2039485372],\"stateMutability\":\"view\",\"type\":\"function\"},{\"conflictFields\":[{\"kind\":0},{\"kind\":4,\"value\":[5]},{\"kind\":4,\"value\":[7]},{\"kind\":4,\"slot\":6,\"value\":[1]},{\"kind\":4,\"slot\":7,\"value\":[0]}],\"constant\":true,\"inputs\":[{\"name\":\"assetId\",\"type\":\"uint256\"}],\"name\":\"infoOf\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"selector\":[2025033526,3509631437],\"stateMutability\":\"view\",\"type\":\"function\"},{\"conflictFields\":[{\"kind\":0}],\"constant\":true,\"inputs\":[{\"name\":\"account\",\"type\":\"address\"}],\"name\":\"isIssuer\",\"outputs\":[{\"name\":\"\",\"type\":\"bool\"}],\"payable\":false,\"selector\":[2273024615,45068934],\"stateMutability\":\"view\",\"type\":\"function\"},{\"conflictFields\":[{\"kind\":4,\"value\":[8]}],\"constant\":true,\"inputs\":[],\"name\":\"getValidAssets\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"selector\":[2312654867,2935780746],\"stateMutability\":\"view\",\"type\":\"function\"},{\"conflictFields\":[{\"kind\":0},{\"kind\":4,\"value\":[5]}],\"constant\":false,\"inputs\":[{\"name\":\"info\",\"type\":\"string[]\"}],\"name\":\"updateInfo\",\"outputs\":[],\"payable\":false,\"selector\":[2329396480,1280088904],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"conflictFields\":[{\"kind\":4,\"value\":[10]}],\"constant\":true,\"inputs\":[],\"name\":\"blackHole\",\"outputs\":[{\"name\":\"\",\"type\":\"address\"}],\"payable\":false,\"selector\":[2660301226,961777779],\"stateMutability\":\"view\",\"type\":\"function\"},{\"conflictFields\":[{\"kind\":4,\"value\":[9]}],\"constant\":true,\"inputs\":[],\"name\":\"contractType\",\"outputs\":[{\"name\":\"\",\"type\":\"string\"}],\"payable\":false,\"selector\":[3408852727,129655028],\"stateMutability\":\"view\",\"type\":\"function\"},{\"conflictFields\":[{\"kind\":0},{\"kind\":3,\"slot\":3,\"value\":[2]},{\"kind\":4,\"value\":[2]}],\"constant\":false,\"inputs\":[{\"name\":\"from\",\"type\":\"address\"},{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"assetId\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"sendFrom\",\"outputs\":[],\"payable\":false,\"selector\":[3504854545,2159217471],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"conflictFields\":[{\"kind\":4,\"value\":[1]},{\"kind\":4,\"value\":[2]}],\"constant\":false,\"inputs\":[],\"name\":\"unSuspend\",\"outputs\":[],\"payable\":false,\"selector\":[3623580105,1304026934],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"conflictFields\":[{\"kind\":4,\"value\":[1]},{\"kind\":4,\"value\":[2]}],\"constant\":false,\"inputs\":[],\"name\":\"suspend\",\"outputs\":[],\"payable\":false,\"selector\":[3862956990,1796534436],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"conflictFields\":[{\"kind\":0},{\"kind\":3,\"slot\":3,\"value\":[1]},{\"kind\":4,\"value\":[7]},{\"kind\":4,\"value\":[8]}],\"constant\":false,\"inputs\":[{\"name\":\"to\",\"type\":\"address\"},{\"name\":\"assetId\",\"type\":\"uint256\"},{\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"issueAsset\",\"outputs\":[],\"payable\":false,\"selector\":[3925475940,510983586],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"conflictFields\":[{\"kind\":0}],\"constant\":true,\"inputs\":[{\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"getHasAmount\",\"outputs\":[{\"name\":\"\",\"type\":\"uint256\"}],\"payable\":false,\"selector\":[4123727866,1311455571],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"name\":\"admin\",\"type\":\"address\"},{\"name\":\"totalAssets\",\"type\":\"uint256[]\"},{\"name\":\"info\",\"type\":\"string[]\"}],\"payable\":false,\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"operator\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"assetId\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"Send\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"name\":\"assetId\",\"type\":\"uint256\"},{\"indexed\":false,\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"Issue\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Suspended\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"name\":\"account\",\"type\":\"address\"}],\"name\":\"UnSuspended\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"account\",\"type\":\"address\"}],\"name\":\"IssuerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"name\":\"account\",\"type\":\"address\"}],\"name\":\"IssuerRemoved\",\"type\":\"event\"}]"
    };

    public static final String ABI = org.fisco.bcos.sdk.v3.utils.StringUtils.joinAll("", ABI_ARRAY);

    public static final String FUNC_DESTROY = "destroy";

    public static final String FUNC_ADDISSUER = "addIssuer";

    public static final String FUNC_REMOVEISSUER = "removeIssuer";

    public static final String FUNC_UPDATETOTALASSETS = "updateTotalAssets";

    public static final String FUNC_OWNEROF = "ownerOf";

    public static final String FUNC_GETTOTALASSETS = "getTotalAssets";

    public static final String FUNC_SUSPENDED = "suspended";

    public static final String FUNC_INFOOF = "infoOf";

    public static final String FUNC_ISISSUER = "isIssuer";

    public static final String FUNC_GETVALIDASSETS = "getValidAssets";

    public static final String FUNC_UPDATEINFO = "updateInfo";

    public static final String FUNC_BLACKHOLE = "blackHole";

    public static final String FUNC_CONTRACTTYPE = "contractType";

    public static final String FUNC_SENDFROM = "sendFrom";

    public static final String FUNC_UNSUSPEND = "unSuspend";

    public static final String FUNC_SUSPEND = "suspend";

    public static final String FUNC_ISSUEASSET = "issueAsset";

    public static final String FUNC_GETHASAMOUNT = "getHasAmount";

    public static final Event SEND_EVENT =
            new Event(
                    "Send",
                    Arrays.<TypeReference<?>>asList(
                            new TypeReference<Address>(true) {},
                            new TypeReference<Address>(true) {},
                            new TypeReference<Address>(true) {},
                            new TypeReference<Uint256>() {},
                            new TypeReference<DynamicBytes>() {}));;

    public static final Event ISSUE_EVENT =
            new Event(
                    "Issue",
                    Arrays.<TypeReference<?>>asList(
                            new TypeReference<Address>(true) {},
                            new TypeReference<Uint256>() {},
                            new TypeReference<DynamicBytes>() {}));;

    public static final Event SUSPENDED_EVENT =
            new Event(
                    "Suspended", Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));;

    public static final Event UNSUSPENDED_EVENT =
            new Event(
                    "UnSuspended",
                    Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));;

    public static final Event ISSUERADDED_EVENT =
            new Event(
                    "IssuerAdded",
                    Arrays.<TypeReference<?>>asList(new TypeReference<Address>(true) {}));;

    public static final Event ISSUERREMOVED_EVENT =
            new Event(
                    "IssuerRemoved",
                    Arrays.<TypeReference<?>>asList(new TypeReference<Address>(true) {}));;

    protected OneToMore(String contractAddress, Client client, CryptoKeyPair credential) {
        super(getBinary(client.getCryptoSuite()), contractAddress, client, credential);
    }

    public static String getBinary(CryptoSuite cryptoSuite) {
        return (cryptoSuite.getCryptoTypeConfig() == CryptoType.ECDSA_TYPE ? BINARY : SM_BINARY);
    }

    public static String getABI() {
        return ABI;
    }

    public TransactionReceipt destroy(BigInteger assetId, byte[] data) {
        final Function function =
                new Function(
                        FUNC_DESTROY,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(
                                        assetId),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(data)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return executeTransaction(function);
    }

    public String destroy(BigInteger assetId, byte[] data, TransactionCallback callback) {
        final Function function =
                new Function(
                        FUNC_DESTROY,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(
                                        assetId),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(data)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForDestroy(BigInteger assetId, byte[] data) {
        final Function function =
                new Function(
                        FUNC_DESTROY,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(
                                        assetId),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(data)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return createSignedTransaction(function);
    }

    public Tuple2<BigInteger, byte[]> getDestroyInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function =
                new Function(
                        FUNC_DESTROY,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(
                                new TypeReference<Uint256>() {},
                                new TypeReference<DynamicBytes>() {}));
        List<Type> results =
                this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple2<BigInteger, byte[]>(
                (BigInteger) results.get(0).getValue(), (byte[]) results.get(1).getValue());
    }

    public TransactionReceipt addIssuer(String account) {
        final Function function =
                new Function(
                        FUNC_ADDISSUER,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Address(account)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return executeTransaction(function);
    }

    public String addIssuer(String account, TransactionCallback callback) {
        final Function function =
                new Function(
                        FUNC_ADDISSUER,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Address(account)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForAddIssuer(String account) {
        final Function function =
                new Function(
                        FUNC_ADDISSUER,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Address(account)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return createSignedTransaction(function);
    }

    public Tuple1<String> getAddIssuerInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function =
                new Function(
                        FUNC_ADDISSUER,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        List<Type> results =
                this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<String>((String) results.get(0).getValue());
    }

    public TransactionReceipt removeIssuer(String account) {
        final Function function =
                new Function(
                        FUNC_REMOVEISSUER,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Address(account)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return executeTransaction(function);
    }

    public String removeIssuer(String account, TransactionCallback callback) {
        final Function function =
                new Function(
                        FUNC_REMOVEISSUER,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Address(account)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForRemoveIssuer(String account) {
        final Function function =
                new Function(
                        FUNC_REMOVEISSUER,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Address(account)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return createSignedTransaction(function);
    }

    public Tuple1<String> getRemoveIssuerInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function =
                new Function(
                        FUNC_REMOVEISSUER,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        List<Type> results =
                this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<String>((String) results.get(0).getValue());
    }

    public TransactionReceipt updateTotalAssets(List<BigInteger> totalAssets) {
        final Function function =
                new Function(
                        FUNC_UPDATETOTALASSETS,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicArray<
                                        org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256>(
                                        org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256
                                                .class,
                                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(
                                                totalAssets,
                                                org.fisco.bcos.sdk.v3.codec.datatypes.generated
                                                        .Uint256.class))),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return executeTransaction(function);
    }

    public String updateTotalAssets(List<BigInteger> totalAssets, TransactionCallback callback) {
        final Function function =
                new Function(
                        FUNC_UPDATETOTALASSETS,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicArray<
                                        org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256>(
                                        org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256
                                                .class,
                                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(
                                                totalAssets,
                                                org.fisco.bcos.sdk.v3.codec.datatypes.generated
                                                        .Uint256.class))),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForUpdateTotalAssets(List<BigInteger> totalAssets) {
        final Function function =
                new Function(
                        FUNC_UPDATETOTALASSETS,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicArray<
                                        org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256>(
                                        org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256
                                                .class,
                                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(
                                                totalAssets,
                                                org.fisco.bcos.sdk.v3.codec.datatypes.generated
                                                        .Uint256.class))),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return createSignedTransaction(function);
    }

    public Tuple1<List<BigInteger>> getUpdateTotalAssetsInput(
            TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function =
                new Function(
                        FUNC_UPDATETOTALASSETS,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(
                                new TypeReference<DynamicArray<Uint256>>() {}));
        List<Type> results =
                this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<List<BigInteger>>(
                convertToNative((List<Uint256>) results.get(0).getValue()));
    }

    public String ownerOf(BigInteger assetId) throws ContractException {
        final Function function =
                new Function(
                        FUNC_OWNEROF,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(
                                        assetId)),
                        Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeCallWithSingleValueReturn(function, String.class);
    }

    public TransactionReceipt getTotalAssets() {
        final Function function =
                new Function(
                        FUNC_GETTOTALASSETS,
                        Arrays.<Type>asList(),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return executeTransaction(function);
    }

    public String getTotalAssets(TransactionCallback callback) {
        final Function function =
                new Function(
                        FUNC_GETTOTALASSETS,
                        Arrays.<Type>asList(),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForGetTotalAssets() {
        final Function function =
                new Function(
                        FUNC_GETTOTALASSETS,
                        Arrays.<Type>asList(),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return createSignedTransaction(function);
    }

    public Tuple1<List<BigInteger>> getGetTotalAssetsOutput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getOutput();
        final Function function =
                new Function(
                        FUNC_GETTOTALASSETS,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(
                                new TypeReference<DynamicArray<Uint256>>() {}));
        List<Type> results =
                this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<List<BigInteger>>(
                convertToNative((List<Uint256>) results.get(0).getValue()));
    }

    public Boolean suspended() throws ContractException {
        final Function function =
                new Function(
                        FUNC_SUSPENDED,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeCallWithSingleValueReturn(function, Boolean.class);
    }

    public String infoOf(BigInteger assetId) throws ContractException {
        final Function function =
                new Function(
                        FUNC_INFOOF,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(
                                        assetId)),
                        Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
        return executeCallWithSingleValueReturn(function, String.class);
    }

    public Boolean isIssuer(String account) throws ContractException {
        final Function function =
                new Function(
                        FUNC_ISISSUER,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Address(account)),
                        Arrays.<TypeReference<?>>asList(new TypeReference<Bool>() {}));
        return executeCallWithSingleValueReturn(function, Boolean.class);
    }

    public BigInteger getValidAssets() throws ContractException {
        final Function function =
                new Function(
                        FUNC_GETVALIDASSETS,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallWithSingleValueReturn(function, BigInteger.class);
    }

    public TransactionReceipt updateInfo(List<String> info) {
        final Function function =
                new Function(
                        FUNC_UPDATEINFO,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicArray<
                                        org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String>(
                                        org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String.class,
                                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(
                                                info,
                                                org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String
                                                        .class))),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return executeTransaction(function);
    }

    public String updateInfo(List<String> info, TransactionCallback callback) {
        final Function function =
                new Function(
                        FUNC_UPDATEINFO,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicArray<
                                        org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String>(
                                        org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String.class,
                                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(
                                                info,
                                                org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String
                                                        .class))),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForUpdateInfo(List<String> info) {
        final Function function =
                new Function(
                        FUNC_UPDATEINFO,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicArray<
                                        org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String>(
                                        org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String.class,
                                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(
                                                info,
                                                org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String
                                                        .class))),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return createSignedTransaction(function);
    }

    public Tuple1<List<String>> getUpdateInfoInput(TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function =
                new Function(
                        FUNC_UPDATEINFO,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(
                                new TypeReference<DynamicArray<Utf8String>>() {}));
        List<Type> results =
                this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple1<List<String>>(
                convertToNative((List<Utf8String>) results.get(0).getValue()));
    }

    public String blackHole() throws ContractException {
        final Function function =
                new Function(
                        FUNC_BLACKHOLE,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
        return executeCallWithSingleValueReturn(function, String.class);
    }

    public String contractType() throws ContractException {
        final Function function =
                new Function(
                        FUNC_CONTRACTTYPE,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
        return executeCallWithSingleValueReturn(function, String.class);
    }

    public TransactionReceipt sendFrom(String from, String to, BigInteger assetId, byte[] data) {
        final Function function =
                new Function(
                        FUNC_SENDFROM,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Address(from),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Address(to),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(
                                        assetId),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(data)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return executeTransaction(function);
    }

    public String sendFrom(
            String from, String to, BigInteger assetId, byte[] data, TransactionCallback callback) {
        final Function function =
                new Function(
                        FUNC_SENDFROM,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Address(from),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Address(to),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(
                                        assetId),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(data)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForSendFrom(
            String from, String to, BigInteger assetId, byte[] data) {
        final Function function =
                new Function(
                        FUNC_SENDFROM,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Address(from),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Address(to),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(
                                        assetId),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(data)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return createSignedTransaction(function);
    }

    public Tuple4<String, String, BigInteger, byte[]> getSendFromInput(
            TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function =
                new Function(
                        FUNC_SENDFROM,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(
                                new TypeReference<Address>() {},
                                new TypeReference<Address>() {},
                                new TypeReference<Uint256>() {},
                                new TypeReference<DynamicBytes>() {}));
        List<Type> results =
                this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple4<String, String, BigInteger, byte[]>(
                (String) results.get(0).getValue(),
                (String) results.get(1).getValue(),
                (BigInteger) results.get(2).getValue(),
                (byte[]) results.get(3).getValue());
    }

    public TransactionReceipt unSuspend() {
        final Function function =
                new Function(
                        FUNC_UNSUSPEND,
                        Arrays.<Type>asList(),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return executeTransaction(function);
    }

    public String unSuspend(TransactionCallback callback) {
        final Function function =
                new Function(
                        FUNC_UNSUSPEND,
                        Arrays.<Type>asList(),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForUnSuspend() {
        final Function function =
                new Function(
                        FUNC_UNSUSPEND,
                        Arrays.<Type>asList(),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return createSignedTransaction(function);
    }

    public TransactionReceipt suspend() {
        final Function function =
                new Function(
                        FUNC_SUSPEND,
                        Arrays.<Type>asList(),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return executeTransaction(function);
    }

    public String suspend(TransactionCallback callback) {
        final Function function =
                new Function(
                        FUNC_SUSPEND,
                        Arrays.<Type>asList(),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForSuspend() {
        final Function function =
                new Function(
                        FUNC_SUSPEND,
                        Arrays.<Type>asList(),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return createSignedTransaction(function);
    }

    public TransactionReceipt issueAsset(String to, BigInteger assetId, byte[] data) {
        final Function function =
                new Function(
                        FUNC_ISSUEASSET,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Address(to),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(
                                        assetId),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(data)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return executeTransaction(function);
    }

    public String issueAsset(
            String to, BigInteger assetId, byte[] data, TransactionCallback callback) {
        final Function function =
                new Function(
                        FUNC_ISSUEASSET,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Address(to),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(
                                        assetId),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(data)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return asyncExecuteTransaction(function, callback);
    }

    public String getSignedTransactionForIssueAsset(String to, BigInteger assetId, byte[] data) {
        final Function function =
                new Function(
                        FUNC_ISSUEASSET,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Address(to),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(
                                        assetId),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(data)),
                        Collections.<TypeReference<?>>emptyList(),
                        0);
        return createSignedTransaction(function);
    }

    public Tuple3<String, BigInteger, byte[]> getIssueAssetInput(
            TransactionReceipt transactionReceipt) {
        String data = transactionReceipt.getInput().substring(10);
        final Function function =
                new Function(
                        FUNC_ISSUEASSET,
                        Arrays.<Type>asList(),
                        Arrays.<TypeReference<?>>asList(
                                new TypeReference<Address>() {},
                                new TypeReference<Uint256>() {},
                                new TypeReference<DynamicBytes>() {}));
        List<Type> results =
                this.functionReturnDecoder.decode(data, function.getOutputParameters());
        return new Tuple3<String, BigInteger, byte[]>(
                (String) results.get(0).getValue(),
                (BigInteger) results.get(1).getValue(),
                (byte[]) results.get(2).getValue());
    }

    public BigInteger getHasAmount(String owner) throws ContractException {
        final Function function =
                new Function(
                        FUNC_GETHASAMOUNT,
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Address(owner)),
                        Arrays.<TypeReference<?>>asList(new TypeReference<Uint256>() {}));
        return executeCallWithSingleValueReturn(function, BigInteger.class);
    }

    public List<SendEventResponse> getSendEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList =
                extractEventParametersWithLog(SEND_EVENT, transactionReceipt);
        ArrayList<SendEventResponse> responses = new ArrayList<SendEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            SendEventResponse typedResponse = new SendEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.operator = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.from = (String) eventValues.getIndexedValues().get(1).getValue();
            typedResponse.to = (String) eventValues.getIndexedValues().get(2).getValue();
            typedResponse.assetId =
                    (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.data = (byte[]) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public List<IssueEventResponse> getIssueEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList =
                extractEventParametersWithLog(ISSUE_EVENT, transactionReceipt);
        ArrayList<IssueEventResponse> responses =
                new ArrayList<IssueEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            IssueEventResponse typedResponse = new IssueEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.to = (String) eventValues.getIndexedValues().get(0).getValue();
            typedResponse.assetId =
                    (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
            typedResponse.data = (byte[]) eventValues.getNonIndexedValues().get(1).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public List<SuspendedEventResponse> getSuspendedEvents(TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList =
                extractEventParametersWithLog(SUSPENDED_EVENT, transactionReceipt);
        ArrayList<SuspendedEventResponse> responses =
                new ArrayList<SuspendedEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            SuspendedEventResponse typedResponse = new SuspendedEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public List<UnSuspendedEventResponse> getUnSuspendedEvents(
            TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList =
                extractEventParametersWithLog(UNSUSPENDED_EVENT, transactionReceipt);
        ArrayList<UnSuspendedEventResponse> responses =
                new ArrayList<UnSuspendedEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            UnSuspendedEventResponse typedResponse = new UnSuspendedEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getNonIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public List<IssuerAddedEventResponse> getIssuerAddedEvents(
            TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList =
                extractEventParametersWithLog(ISSUERADDED_EVENT, transactionReceipt);
        ArrayList<IssuerAddedEventResponse> responses =
                new ArrayList<IssuerAddedEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            IssuerAddedEventResponse typedResponse = new IssuerAddedEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public List<IssuerRemovedEventResponse> getIssuerRemovedEvents(
            TransactionReceipt transactionReceipt) {
        List<Contract.EventValuesWithLog> valueList =
                extractEventParametersWithLog(ISSUERREMOVED_EVENT, transactionReceipt);
        ArrayList<IssuerRemovedEventResponse> responses =
                new ArrayList<IssuerRemovedEventResponse>(valueList.size());
        for (Contract.EventValuesWithLog eventValues : valueList) {
            IssuerRemovedEventResponse typedResponse = new IssuerRemovedEventResponse();
            typedResponse.log = eventValues.getLog();
            typedResponse.account = (String) eventValues.getIndexedValues().get(0).getValue();
            responses.add(typedResponse);
        }
        return responses;
    }

    public static OneToMore load(String contractAddress, Client client, CryptoKeyPair credential) {
        return new OneToMore(contractAddress, client, credential);
    }

    public static OneToMore deploy(
            Client client,
            CryptoKeyPair credential,
            String admin,
            List<BigInteger> totalAssets,
            List<String> info)
            throws ContractException {
        byte[] encodedConstructor =
                FunctionEncoder.encodeConstructor(
                        Arrays.<Type>asList(
                                new org.fisco.bcos.sdk.v3.codec.datatypes.Address(admin),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicArray<
                                        org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256>(
                                        org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256
                                                .class,
                                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(
                                                totalAssets,
                                                org.fisco.bcos.sdk.v3.codec.datatypes.generated
                                                        .Uint256.class)),
                                new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicArray<
                                        org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String>(
                                        org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String.class,
                                        org.fisco.bcos.sdk.v3.codec.Utils.typeMap(
                                                info,
                                                org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String
                                                        .class))));
        return deploy(
                OneToMore.class,
                client,
                credential,
                getBinary(client.getCryptoSuite()),
                getABI(),
                encodedConstructor,
                null);
    }

    public static class SendEventResponse {
        public TransactionReceipt.Logs log;

        public String operator;

        public String from;

        public String to;

        public BigInteger assetId;

        public byte[] data;
    }

    public static class IssueEventResponse {
        public TransactionReceipt.Logs log;

        public String to;

        public BigInteger assetId;

        public byte[] data;
    }

    public static class SuspendedEventResponse {
        public TransactionReceipt.Logs log;

        public String account;
    }

    public static class UnSuspendedEventResponse {
        public TransactionReceipt.Logs log;

        public String account;
    }

    public static class IssuerAddedEventResponse {
        public TransactionReceipt.Logs log;

        public String account;
    }

    public static class IssuerRemovedEventResponse {
        public TransactionReceipt.Logs log;

        public String account;
    }
}
